package network;

import transport.TransportLayer;
import utils.*;

public class NetMessageHandler implements MessageHandler, Runnable {

	SynchQueue incoming = new SynchQueue();

	public void handleMessage(String msg) {
		incoming.add(msg);
	}

	void processMessage(String msg) {
		String[] splitMessage = msg.split(":");
		if (splitMessage[2].equalsIgnoreCase("DISCOVER")) {
			NetworkLayer.sd.handleDiscover();
		} else if (splitMessage[2].equalsIgnoreCase("SERVICES")) {
			NetworkLayer.sd.handleServices(msg);
		} else if (splitMessage[2].equalsIgnoreCase("VECTOR")) {
			NetworkLayer.bellman.handleVector(msg);
		} else if (splitMessage[2].equalsIgnoreCase("HELLO")) {
			NetworkLayer.neighbours.updateTable(splitMessage[1]);
		} else if (splitMessage[2].equalsIgnoreCase("NXTHOP")) {
			NetworkLayer.router.processNXTHOP(msg);
		}
	}

	public void run() {
		while (true) {
			String msg = incoming.get();
			String[] splitMessage = msg.split(":");
			if (splitMessage[2].equalsIgnoreCase("DISCOVER")
					|| splitMessage[2].equalsIgnoreCase("SERVICES")
					|| splitMessage[2].equalsIgnoreCase("VECTOR")
					|| splitMessage[2].equalsIgnoreCase("HELLO")
					|| splitMessage[2].equalsIgnoreCase("NXTHOP")) {
				processMessage(msg);
			} else {
				TransportLayer.receive(msg);
			}
		}

	}

}
